package com.qkst.website.common.utils;

import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.regex.Matcher;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * 验证器，用于验证所有情况
 * @author lihao
 * @email ahlxlihao@163.com
 */
public class Validator
{
    /**
     * 定义日志输出器
     */
    private static final Logger log = LoggerFactory.getLogger(Validator.class);

    /**
     * 判断对象是否为null
     * @param obj 对象
     * @return 为null返回true
     */
    public static boolean isNull(Object obj)
    {
        return obj == null ? true : false;
    }

    /**
     * @param list list
     * @return the list is Empty
     */
    public static boolean isEmpty(Collection<?> list)
    {
        if (list == null || list.size() == 0)
        {
            return true;
        }
        return false;
    }

    /**
     * @param list list
     * @return the list is Empty
     */
    public static boolean isEmpty(Object[] list)
    {
        if (list == null || list.length == 0)
        {
            return true;
        }
        return false;
    }

    /**
     * 判断字符串是否为空
     * @param str 字符串
     * @return 为空返回true
     */
    public static boolean isNull(String str)
    {
        return str == null || "".equals(str) ? true : false;
    }

    /**
     * 判断字符串是否为空
     * @param str 字符串
     * @return 为空返回true
     */
    public static boolean isEmpty(String str)
    {
        return str == null || "".equals(str) || "null".equals(str.trim()) ? true : false;
    }

    /**
     * 判断字符串是否为日期类型
     * @param time 日期类型字符串
     * @return isData
     */
    public static boolean isDate(String time)
    {
        if (isEmpty(time))
        {
            return false;
        }
        String pattern = "";
        if (time.indexOf("-") > -1)
        {
            pattern = "yyyy-MM-dd";
            if (time.indexOf(":") > -1)
            {
                switch (time.split(":").length)
                {
                case 1:
                    pattern += " HH";
                    break;
                case 2:
                    pattern += " HH:mm";
                    break;
                case 3:
                    pattern += " HH:mm:ss";
                    break;
                }
            }
        }
        else
        {
            pattern = "yyyy/MM/dd";
            if (time.indexOf(":") > -1)
            {
                switch (time.split(":").length)
                {
                case 1:
                    pattern += " HH";
                    break;
                case 2:
                    pattern += " HH:mm";
                    break;
                case 3:
                    pattern += " HH:mm:ss";
                    break;
                }
            }
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        try
        {
            sdf.parse(time);
        }
        catch (ParseException e)
        {
            log.debug("日期" + time + "转换错误!");
            return false;
        }
        return true;
    }

    /**
     * 验证字符串是否为整数(0到9的数值，不含小数)
     * @param arg 字符串
     * @return 若是数据即返回true
     */
    public static boolean isNumeric(String arg)
    {
        Matcher isNum = Patterner.patternNumeric().matcher(arg);
        if (isNum.matches())
        {
            return true;
        }
        return false;
    }

    /**
     * 验证字符串是否为Double类型
     * @param arg 字符串
     * @return 若是数据即返回true
     */
    public static boolean isDouble(String arg)
    {
        Matcher isNum = Patterner.patternDouble().matcher(arg);
        if (isNum.matches())
        {
            return true;
        }
        return false;
    }

    /**
     * 验证字符串是否为Email类型
     * @param arg 字符串
     * @return 若是数据即返回true
     */
    public static boolean isEmail(String arg)
    {
        Matcher isNum = Patterner.patternEmail().matcher(arg);
        if (isNum.matches())
        {
            return true;
        }
        return false;
    }

    /**
     * 检测指定路径的文件是否存在
     * @param path 文件路径及名称
     * @return 存在返回true
     */
    public static boolean isFileExist(String path)
    {
        log.debug("文件路径{}：", path);
        if (isNull(path))
        {
            return false;
        }
        File file = new File(path);

        return file.exists() ? true : false;
    }
}
